package com.zoulf.jianliao.frags.user;


import static android.app.Activity.RESULT_OK;

import android.content.Intent;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.support.annotation.StringRes;
import android.widget.EditText;
import android.widget.ImageView;
import butterknife.BindView;
import butterknife.OnClick;
import com.bumptech.glide.Glide;
import com.yalantis.ucrop.UCrop;
import com.zoulf.common.app.MyApplication;
import com.zoulf.common.app.PresenterFragment;
import com.zoulf.common.widget.PortraitView;
import com.zoulf.factory.presenter.user.UpdateInfoContract;
import com.zoulf.factory.presenter.user.UpdateInfoContract.Presenter;
import com.zoulf.factory.presenter.user.UpdateInfoPresenter;
import com.zoulf.jianliao.R;
import com.zoulf.jianliao.activities.MainActivity;
import com.zoulf.jianliao.frags.media.GalleryFragment;
import com.zoulf.jianliao.frags.media.GalleryFragment.OnSelectedListener;
import java.io.File;
import net.qiujuer.genius.ui.widget.Button;
import net.qiujuer.genius.ui.widget.Loading;

/**
 * 用户更新信息的界面
 */
public class UpdateInfoFragment extends PresenterFragment<UpdateInfoContract.Presenter>
    implements UpdateInfoContract.View {

  @BindView(R.id.im_sex)
  ImageView mSex;

  @BindView(R.id.edit_desc)
  EditText mDesc;

  @BindView(R.id.im_portrait)
  PortraitView mPortrait;

  @BindView(R.id.loading)
  Loading mLoading;

  @BindView(R.id.btn_submit)
  Button mSubmit;

  // 头像的本地路径
  private String mPortraitPath;
  private boolean isMan = true;

  public UpdateInfoFragment() {
    // Required empty public constructor
  }

  @Override
  protected int getContentLayoutId() {
    return R.layout.fragment_update_info;
  }

  @OnClick(R.id.im_portrait)
  void onPortraitClick() {
    new GalleryFragment()
        .setOnSelectedListener(new OnSelectedListener() {
          @Override
          public void onSelectedImage(String path) {
            UCrop.Options options = new UCrop.Options();
            // 设置图片处理的格式-JPEG
            options.setCompressionFormat(CompressFormat.JPEG);
            // 设置压缩后的图片精度
            options.setCompressionQuality(96);

            File dPath = MyApplication.getPortraitTmpFile();
            // 发起剪切
            UCrop.of(Uri.fromFile(new File(path)), Uri.fromFile(dPath))
                .withAspectRatio(1, 1) // 1比1比例
                .withMaxResultSize(520, 520) // 返回的最大尺寸
                .withOptions(options) // 相关参数
                .start(getActivity());
          }
        })
        // show 的时候建议使用getChildFragmentManager，
        // 直接使用FragmentManager可能会与Activity的Manager引起麻烦
        // tag GalleryFragment的class名
        .show(getChildFragmentManager(), GalleryFragment.class.getName());
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // 收到从Activity传递过来的回调，然后取出其中的值进行图片加载
    // 如果是能够处理的类型
    if (resultCode == RESULT_OK && requestCode == UCrop.REQUEST_CROP) {
      // 通过UCrop得到对应的Uri
      final Uri resultUri = UCrop.getOutput(data);
      if (resultUri != null) {
        loadPortrait(resultUri);
      }
    } else if (resultCode == UCrop.RESULT_ERROR) {
      MyApplication.showToast(R.string.data_rsp_error_unknown);
      final Throwable cropError = UCrop.getError(data);
    }
  }

  /**
   * 加载Uri到当前的头像中
   *
   * @param uri Uri
   */
  private void loadPortrait(Uri uri) {
    // 得到头像地址
    mPortraitPath = uri.getPath();
    Glide.with(this)
        .load(uri)
        .asBitmap()
        .centerCrop()
        .into(mPortrait);
  }

  @OnClick(R.id.im_sex)
  void onSexClick() {
    // 性别图标点击的时候触发
    isMan = !isMan; // 反向性别

    Drawable drawable = getResources()
        .getDrawable(isMan ? R.drawable.ic_sex_man : R.drawable.ic_sex_woman);
    mSex.setImageDrawable(drawable);
    // 设置背景的层级，切换颜色
    mSex.getBackground().setLevel(isMan ? 0 : 1);
  }

  @OnClick(R.id.btn_submit)
  void onSubmitClick() {
    String desc = mDesc.getText().toString();
    // 调用P层进行注册
    mPresenter.update(mPortraitPath, desc, isMan);
  }

  @Override
  public void showLoading() {
    super.showLoading();

    // 正在进行时，正在进行注册，界面不可操作
    // 开始Loading
    mLoading.start();
    // 让控件不可以输入
    mDesc.setEnabled(false);
    mPortrait.setEnabled(false);
    mSex.setEnabled(false);
    // 提交按钮不可以继续点击
    mSubmit.setEnabled(false);

  }

  @Override
  public void showError(@StringRes int str) {
    super.showError(str);
    // 当需要显示错误的时候触发，一定是结束了
    // 停止Loading
    mLoading.stop();
    // 让控件可以输入
    mDesc.setEnabled(true);
    mPortrait.setEnabled(true);
    mSex.setEnabled(true);
    // 提交按钮可以继续点击
    mSubmit.setEnabled(true);
  }

  @Override
  public void updateSucceed() {
    // 更新成功跳转到
    MainActivity.show(getContext());
    getActivity().finish();
  }

  @Override
  protected Presenter initPresenter() {
    return new UpdateInfoPresenter(this);
  }
}
